C++ ifstream 到 char *
全部标签 有人能解释一下下面2段代码的处理方式的区别吗?它们肯定会编译成不同的汇编代码,但我试图了解代码如何表现不同。我知道字符串文字被放入只读内存并且实际上是静态的,但这与下面的显式静态有何不同?structObj1{voidFoo(){constchar*str("hello");}};和structObj2{voidFoo(){staticconstchar*str("hello");}}; 最佳答案 在您的静态版本中,只有一个变量将存储在某处,并且无论何时执行该函数,都将使用完全相同的变量。即使是递归调用。非静态版本将在每次函数调用时
如果我有一个指向字符串变量chars数组的指针,那么键入是否有区别:char*name="name";还有,stringname="name"; 最佳答案 是的,有区别。主要是因为你可以修改你的字符串,但你不能修改你的第一个版本——但是如果你尝试,C++编译器甚至不会警告你这是被禁止的。所以总是使用第二个版本。如果无论出于何种原因你需要使用一个字符指针,就让它const:charconst*str="name";现在,如果您尝试修改str的内容,编译器将(正确地)禁止这样做。您还应该将编译器的警告级别提高一个档次:然后它会警告您的第
如果我声明一个临时自动删除的字符缓冲区使用std::auto_ptrbuffer(newchar[n]);然后当缓冲区超出范围时,缓冲区会被自动删除。我会假设缓冲区是使用delete删除的。但是缓冲区是使用new[]创建的,所以严格来说应该使用delete[]删除缓冲区。这种不匹配可能导致内存泄漏的可能性有多大? 最佳答案 对用new[]分配的指针调用delete的行为是undefined.如您所料,auto_ptrdoescalldelete当智能指针超出范围时。您需要担心的不仅仅是内存泄漏——崩溃和其他奇怪的行为也是可能的。如果
我是C++编程的新手,我一直在尝试从constchar*转换为unsignedint,但没有成功。我有一个:constchar*charVar;我需要将其转换为:unsignedintuintVar;如何在C++中完成?谢谢 最佳答案 #include#includeconstchar*value="1234567";stringstreamstrValue;strValue>intValue;cout输出:12345671234567 关于c++-如何从constchar*转换为uns
就在几周前,我了解到C++标准有一个严格的别名规则。基本上,我问了一个关于移位的问题——而不是一次移位一个字节,为了最大限度地提高性能,我想用(分别为32或64位)加载处理器的native寄存器并执行4/8的移位字节全部在一条指令中。这是我想避免的代码:unsignedcharbuffer[]={0xab,0xcd,0xef,0x46};for(inti=0;i>4);}buffer[3]相反,我想使用类似的东西:unsignedcharbuffer[]={0xab,0xcd,0xef,0x46};unsignedint*p=(unsignedint*)buffer;//unsigne
我知道从char**到constchar**的隐式转换无法完成以及为什么,以及到char*const*有效。请参阅底部的解释链接。除了一件特定的事情之外,这一切都是有意义的。所以我有以下代码:#includevoidprint(constchar*const*param){printf("%s\n",param[0]);}intmain(intargc,char**argv){print(argv);return0;}如果我将它编译为C++代码,它编译得非常好。但是,如果相同的代码仅编译为C代码,我会收到一个错误(好吧,一个警告,但我们假设-Werror,即将警告视为错误)。gcc:t
这个问题在这里已经有了答案:Howcanacharpointerbeinitializedwithastring(Arrayofcharacters)butanintpointernotwithanarrayofinteger?[duplicate](4个回答)关闭5年前。我试图理解字符串、数组和指针之间的关系。我正在阅读的这本书有一个程序,它在其中初始化一个变量,如下所示:char*szString="Name";我理解这一点的方式是,C风格的字符串只是一个字符数组。数组只是引用指针(存储数组的第一个值)和偏移量的简写版本。IE。array[5]实际上返回从表达式*(array+5)
以下是3个功能。main()按预期打印出来。现在,我猜在mycharstack()中,字符串存储在堆栈中,因此当“ch”超出范围时,它应该无法返回字符串。它是如何正常工作的?我猜存储在mychar()中的字符串也在堆栈上。它应该正常工作吗?我猜代码中还有其他错误和内存泄漏,如果有请告诉我。我可以用std::string做这些更清洁和更容易的事情。但我想了解char*是怎么回事。#includeusingnamespacestd;char*mychar(){return"Hello";}char*mycharstack(){char*ch="HelloStack";returnch;}c
以下示例程序不能为我编译clang3.1或gcc4.8:#include#includeusingnamespacestd;intmain(){vectorbla;bla.emplace_back("filename");return0;}但是,我认为emplace_back应该"Insertanewelementattheendofthevector,rightafteritscurrentlastelement.Thisnewelementisconstructedinplaceusingargsastheargumentsforitsconstruction."有谁知道为什么这不
我正在尝试使用ifstream打开文件失败的测试程序。代码如下:-#include#include#includeusingnamespacestd;intmain(){ifstreamifs("wrong_filename.txt");cout::value输出是:-falsetrue如果ifs不是pointer,那么它怎么等于nullptr? 最佳答案 在C++11之前,C++流可以隐式转换为void*。如果流不是处于无错误状态,则结果将是NULL,如果是,则返回其他结果。所以ifs==NULL(不应该与nullptr一起使用,